export interface FlatNode {
    id: number;
    pid: number | null;
    [key: string]: any; // 允许其他任意属性
  }
  
  export interface TreeNode extends Omit<FlatNode, 'pid'> {
    children: TreeNode[];
  }
  
export  function flatToTree(flatData: FlatNode[]): TreeNode[] {
    // 1. 创建ID到节点的映射
    const nodeMap = new Map<number, TreeNode>();
    
    // 2. 初始化所有节点并添加children属性
    flatData.forEach(item => {
      nodeMap.set(item.id, {
        ...item,
        children: []
      });
    });
  
    // 3. 构建树形结构
    const tree: TreeNode[] = [];
    
    nodeMap.forEach(node => {
      if (node.pid === 0) {
        tree.push(node); // 根节点
      } else {
        const parent = nodeMap.get(node.pid);
        parent?.children.push(node); // 挂载到父节点
      }
    });
  
    return tree;
  }


 export const buildTree=(buildings:any, rooms:any)=> {
    // 创建节点映射表（id -> node）
    const nodeMap = new Map();
    
    // 1. 创建所有建筑/单元节点
    buildings.forEach((item:any) => {
        nodeMap.set(item.id, {
            ...item,
            type: 'building', // 标记节点类型
            children: []      // 子节点（单元或房间）
        });
    });
    
    // 2. 构建层级关系
    const tree:any = [];
    buildings.forEach((building:any) => {
        const node = nodeMap.get(building.id);
        
        if (building.pid === 0) {
            // 根节点（楼栋）
            node.type = 'building';
            tree.push(node);
        } else {
            // 子节点（单元）
            node.type = 'unit';
            const parent = nodeMap.get(building.pid);
            if (parent) {
                parent.children.push(node);
            }
        }
    });
    
    // 3. 分配房间到单元（作为单元的children）
    rooms.forEach((room:any) => {
        const unitNode = nodeMap.get(room.buildingId);
        if (unitNode) {
            unitNode.children.push({
                ...room,
                type: 'room',
                children: [] // 房间没有子节点
            });
        }
    });
    
 
    
    return tree;
}